package com.bidevalution.business.context;

import java.util.ArrayList;
import java.util.List;

/**
 * 评审因素
 * @author huyiqi
 * @date 2019/12/7
 */
public enum FileType {
    /**
     * 商务标
     */
    BUSINESS(1, "商务标"),
    /**
     * 技术标
     */
    TECHNOLOGY(2, "技术标"),
    /**
     * 资信标
     */
    COMPOSITE(4, "资信标"),
    /**
     * 企业业绩
     */
    PERFORMANCE(8, "业绩"),
    /**
     * 查看招标文件最后固定的类型
     */
    TENDER_FILE(1024, "附件"),
    /**
     * 查看投标文件最后固定的类型
     */
    BID_FILE(2048, "附件");

    FileType(int code, String name) {
        this.code = code;
        this.name = name;
    }

    public int getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    /**
     * 获取需要展示的附件类型
     * @param types 商务、技术、资信的相量相加
     * @param needPerf 是否需要业绩
     * @param isZb 是否招标：true招标，false投标
     * @return 返回需要展示的附件类型列表
     */
    public static List<FileType> getFileTypeList(int types, boolean needPerf, boolean isZb) {
        //处理业绩类型
        if(needPerf) {
            types |= PERFORMANCE.getCode();
        }
        //处理招标、投标类型
        if(isZb) {
            types = TENDER_FILE.getCode() | BUSINESS.getCode();
        } else {
            types |= BID_FILE.getCode();
        }

        List<FileType> list = new ArrayList<>();
        FileType[] fileTypes = FileType.values();
        for(FileType fileType:fileTypes) {
            int code = fileType.getCode();
            if((code & types) == code) {
                list.add(fileType);
            }
        }

        return list;
    }

    public static FileType getByCode(int code) {
        FileType result = null;
        FileType[] fileTypes = FileType.values();
        for(FileType fileType:fileTypes) {
            if(code == fileType.getCode()) {
                result = fileType;
                break;
            }
        }
        return result;
    }

    private int code;
    private String name;
}
